package cn.hongwei.service.impl;

import cn.hongwei.service.FileService;
import cn.hongwei.util.OssProperties;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.PostConstruct;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;

/**
 * @author Great
 * @email 1224028994@qq.com
 */
@Service
public class FileServiceImpl implements FileService {

    @Autowired
    OssProperties ossProperties;

    String scheme;
    String endpoint; //阿里云oss存储我们选择的桶的服务器地址
    // 阿里云账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维，请登录RAM控制台创建RAM用户。
    String accessKeyId;
    String accessKeySecret;
    String bucketName;

    //从yml文件获取上传所需要的参数
    @PostConstruct  //可以定义一个初始化方法，让它在构造器调用之后立即执行
    public void init(){
        scheme=ossProperties.getScheme();
        endpoint=ossProperties.getEndpoint();
        accessKeyId=ossProperties.getAccessKeyId();
        accessKeySecret=ossProperties.getAccessKeySecret();
        bucketName=ossProperties.getBucketName();
    }

    @Override
    public String upload(MultipartFile file, String module) {
        //获取上传的文件名
        String originalFilename = file.getOriginalFilename();
        OSS ossClient = new OSSClientBuilder().build(scheme + endpoint, accessKeyId, accessKeySecret);
        InputStream inputStream = null;
        try {
            inputStream = file.getInputStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        //上传到阿里云服务器的文件名
        String fileName =  module+"/"+new DateTime().toString("yyyy/MM-dd/") +   System.currentTimeMillis()+"_"+ UUID.randomUUID().toString().replace("-" , "").substring(0,8)
                + originalFilename.substring(originalFilename.lastIndexOf("."));
        //参数2：  代表 上传到bucketName这个桶内的文件的 路径以及文件名称
        ossClient.putObject(bucketName, fileName, inputStream);

        //文件的地址
        String path = scheme+ bucketName +"." + endpoint + "/" +fileName;
        ossClient.shutdown();
        return path;
    }

    /**
     *
     * @param path 文件的URL
     * @param module 阿里云创建的目录
     */
    @Override
    public void delete(String path, String module) {
        OSS ossClient = new OSSClientBuilder().build(scheme+ endpoint, accessKeyId, accessKeySecret);
        path = path.substring(path.lastIndexOf(module+"/"));
        ossClient.deleteObject(bucketName, path);
        ossClient.shutdown();
    }
}
